﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sebrae.Academico.InfraEstrutura.Core;
using Sebrae.Academico.Trilhas.Dominio.Classes;
using Sebrae.Academico.InfraEstrutura.Core.UnitOfWork;
using NHibernate;
using NHibernate.Criterion;

namespace Sebrae.Academico.Trilhas.BM.Classes
{

    public class BMTrilhaNivel : BusinessManagerBase
    {
        #region Atributos

        private RepositorioBase<TrilhaNivel> repositorio = null;

        #endregion

        #region Construtor

        public BMTrilhaNivel(IUnitOfWork unitOfWork)
        {
            repositorio = new RepositorioBase<TrilhaNivel>(unitOfWork);
        }

        #endregion
              

        public void Salvar(TrilhaNivel pTrilhaNivel)
        {
            repositorio.Salvar(pTrilhaNivel);
        }

        public void Excluir(TrilhaNivel pTrilhaNivel)
        {
            repositorio.Excluir(pTrilhaNivel);
        }

        public IList<TrilhaNivel> ObterTodos()
        {
            return repositorio.ObterTodos();
        }

        public TrilhaNivel ObterporID(int pId)
        {
            return repositorio.ObterPorID(pId);
        }

        public bool ValidarDependencias(TrilhaNivel pTrilhaNivel)
        {

            if (repositorio.CountByProperty("PreRequisito", pTrilhaNivel) > 0) 
                return true;
            else
                return false;
     
        }

        public IList<TrilhaNivel> ObterTrilhaNivelPreRequisito()
        {
            IList<TrilhaNivel> lstTrilha = (from l in repositorio.Session.QueryOver<TrilhaNivel>()
                                            where l.PreRequisito != null
                                            select l.PreRequisito).List<TrilhaNivel>().Distinct().ToList<TrilhaNivel>();

            return lstTrilha;
        }

        public IList<TrilhaNivel> ObterDadosPesquisa(string pNome, TrilhaNivel pTrilhaPreRequisito, int pPrazoemDias)
        {
            ICriteria query = repositorio.Session.CreateCriteria<TrilhaNivel>();

            if (pNome.Length > 0)
                query.Add(Expression.Like("Nome","%"+pNome+"%"));

            if (pTrilhaPreRequisito != null)
                query.Add(Expression.Eq("PreRequisito", pTrilhaPreRequisito));

            if (pPrazoemDias > 0)
                query.Add(Expression.Eq("QuantidadeDiasPrazo",pPrazoemDias));

            return query.List<TrilhaNivel>();

        }
    }

}
